<?php
/**
 * 缓存接口
 * 
 * @author Leo 2010-09-09
 *
 */

interface ICache {
	/**
	 * 缓存数据
	 * @param string $key 缓存唯一键值
	 * @param mixed $value 要缓存的数据
	 * @param int $expire 缓存时间
	 * @param string $group 缓存组
	 */
	function add($key, $value, $expire = 0, $group = 'default');
	/**
	 * 从缓存中取数据
	 * @param string $key 缓存唯一键值
	 * @param string $group 缓存组
	 * @return mixed 缓存数据,如果未命中则返回null 
	 */
	function get($key, $group = 'default');
	/**
	 * 删除一个缓存
	 * @param string $key 缓存唯一键值
	 * @param string $group 缓存组
	 */
	function delete($key, $group = 'default');
	/**
	 * 清空组内所有缓存
	 * @param string $group 缓存组
	 */
	function clear($check = true, $group = 'default');
}
/**
 * 缓存数据
 * @param string $key 缓存唯一键值
 * @param mixed $value 要缓存的数据
 * @param int $expire 缓存时间
 * @param string $group 缓存组
 */
function cache_add($key, $value, $expire = 0, $group = 'default') {
	global $__cache;
	if (is_null ( $__cache )) {
		$ioc = get_current_ioc ();
		$__cache = $ioc->get ( 'cache' );
	}
	if ($__cache) {
		return $__cache->add ( $key, $value, $expire, $group );
	}
	return false;
}
/**
 * 从缓存中取数据
 * @param string $key 缓存唯一键值
 * @param string $group 缓存组
 * @return mixed 缓存数据,如果未命中则返回null 
 */
function cache_get($key, $group = 'default') {
	global $__cache;
	if (is_null ( $__cache )) {
		$ioc = get_current_ioc ();
		$__cache = $ioc->get ( 'cache' );
	}
	if ($__cache) {
		return $__cache->get ( $key, $group );
	}
	return null;
}
/**
 * 删除一个缓存
 * @param string $key 缓存唯一键值
 * @param string $group 缓存组
 */
function cache_delete($key, $group = 'default') {
	global $__cache;
	if (is_null ( $__cache )) {
		$ioc = get_current_ioc ();
		$__cache = $ioc->get ( 'cache' );
	}
	if ($__cache) {
		return $__cache->delete ( $key, $group );
	}
}
/**
 * 清空组内所有缓存
 * @param boolean $check 清空前是否检查过期
 * @param string $group 缓存组
 */
function cache_clear($check = true, $group = 'default') {
	global $__cache;
	if (is_null ( $__cache )) {
		$ioc = get_current_ioc ();
		$__cache = $ioc->get ( 'cache' );
	}
	if ($__cache) {
		return $__cache->clear ( $check, $group );
	}
}